package org.hyl.javabase.多线程;


public class WaitNotify {  
    public static void main(String args[]){  
        final byte a[] = {0};//以该对象为共享资源  
        new Thread(new NumberPrint((1),a),"1").start();  
        new Thread(new NumberPrint((2),a),"2").start();  
    }  
}  
class NumberPrint implements Runnable{  
    private int number;  
    public byte res[];  
    public static int count = 10;  
    public NumberPrint(int number, byte a[]){  
        this.number = number;  
        res = a; 
    }  
    public void run(){  
        synchronized (res){  
            while(count-- > 0){  
                try {  
                   
                	//一开始就要广播消息：谁要用啊= res.notify();这时所有的线程都收到了这个消息，本来wait状态（阻塞状态）的线程都被唤醒，处于就绪状态
                    res.notify();//唤醒等待res资源的线程，把锁交给线程（该同步锁执行完毕自动释放锁）  
                    System.out.println(" 。。。"+number);  
                   // res.wait();//释放CPU控制权，释放res的锁，本线程阻塞，等待被唤醒。  
                    //用完了要交出钥匙, 关嘴上说，不交出钥匙 ，还是没用的，交出钥匙后，本线程就处于阻塞状态，等待被唤醒。  
                    System.out.println("------线程"+Thread.currentThread().getName()+"获得锁，wait()后的代码继续运行："+number);  
                } catch (Exception e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }//end of while  
            return;  
        }//synchronized  
          
    }  
}  
